草庐IT

C++11 auto 和 size_type

全部标签

C++ 错误 : Expected a type specifier

当我尝试像这样使用LoggerStream时,我得到“需要一个类型说明符”:constLoggerStreamlogger(L"测试组件");这是我尝试使用LoggerStream的地方:#include"Logger.h"#include"TestComponent.h"namespaceophRuntime{structTestComponent::TestComponentImpl{private:LoggerStreamlogger(L"TestComponent");NO_COPY_OR_ASSIGN(TestComponentImpl);};TestComponent::T

c++ - 使用整数指针作为唯一 ID 有多糟糕? C++11

我有一个类,在实例化时需要获得一些唯一的ID才能工作。最初我想使用一个分配和递增的静态函数。我不需要它们连续,只需要唯一。classA{intid_1;intid_2;intid_3;public:staticintlast_id=0;staticintget_id(){returnA::last_id++;}...A(){id_1=A::get_id();id_2=A::get_id();id_3=A::get_id();}};现在,我正在考虑使用多线程。我认为静态函数将是一个瓶颈,因为一开始我正在构建这些对象的几十万个实例。在程序结束之前我不会销毁任何实例,因此在初始化之后它们是固

微软再次全屏弹窗轰炸 Windows 10 用户,提醒其升级 Windows 11

IT之家 2月6日消息,自2023年5月安装累积更新后,Windows10 用户就开始遇到全屏弹窗。如今,2024年1月的可选更新再次带来了令人厌烦的弹窗,其内容则是赤裸裸地推销 Windows11。尽管Windows11已经发布两年多,但仍有大量用户坚守Windows10。微软宣布Windows10将于2025年10月14日停止支持,并开始逐步引导用户升级到Windows11。尽管微软提供了免费升级选项,但许多用户仍选择至少等到支持结束日期才考虑升级。然而,微软并没有放弃推广Windows11,而是通过四页全屏弹窗向用户施压:第一页:告诉用户可以免费升级到Windows11,升级过程中不会影

c++ - 在 C++ 11 中,如何根据返回类型专门化采用函数对象的函数模板?

我在C++11中有一个包装函数,旨在与lambda一起使用,如下所示:templateintWrapExceptions(Func&&f){try{returnf();}catch(std::exception){return-1;}}我可以这样调用它:intrc=WrapExceptions([&]{DoSomething();return0;});assert(rc==0);生活还可以。不过,我想要做的是重载或专门化包装函数,以便当内部函数返回void时,外部函数返回默认值0,例如:intrc=WrapExceptions([&]{DoSomething();});assert(r

c++ - 为枚举类创建类似成员函数的直观方法 (C++11)

据我所知,我正在寻找的理想的东西是在C++11规范之外,如果我有一个枚举类之类的东西,它的核心看起来就是这样的东西像这样:enumclassColor{RED,ORANGE,YELLOW,GREEN,CYAN,AZURE,BLUE,MAGENTA};理想情况下,我希望拥有(非虚拟)成员函数,这样我就可以定义如下内容:ColorColor::complement()const{switch(*this){caseRED:returnCYAN;caseORANGE:returnAZURE;caseYELLOW:returnBLUE;caseGREEN:returnMAGENTA;caseC

c++ - 用户定义类型的 std::common_type 特征

自C++11以来,引入了类型特征std::common_type。std::common_type确定其所有模板参数之间的公共(public)类型。在C++14中,还引入了辅助类型std::common_type_t以缩短使用std::common_type类型特征的代码。std::common_type在重载算术运算符中特别有用,例如,templatestd::common_type_toperator+(T1const&t1,T2const&t2){returnt1+t2;}如果它的模板参数是内置类型(例如,int、double),它会工作得很好。但是,如果我将用户定义的类型作为模

c++ - `auto` 类成员上下文中的返回类型

如何对类成员使用自动类型推导?比如下面的代码structA{autofoo();//fooisdefinedinanotherfile};intmain(){Aa;a.foo();}其中foo的返回类型为auto会导致以下错误:error:function'foo'withdeducedreturntypecannotbeusedbeforeitisdefineda.foo();^错误是可以理解的,因为编译无法在不知道其定义的情况下知道foo的返回类型是什么。我的问题是,如果函数的声明和定义分离,是否有任何变通方法或某种编程模式可以规避自动返回类型不能用于类成员函数的问题。

c++ - 在 C++11 智能指针中存储 std::thread

在C++11及更高版本中,像这样直接将std::thread存储为类的成员时,有什么优点或缺点:std::threadmy_thread;与像这样将std::shared_ptr或std::unique_ptr存储到线程相反:std::shared_ptrmy_thread_ptr;是否有任何代码选项比其他选项更好?或者没关系,只需2种不同的方式来处理线程对象。 最佳答案 使用指针(或智能指针)成员可能有一些不太常见的原因,但对于常见用法,似乎是std::thread要么不适用,要么本身就足够灵活:我们可能希望更好地控制对象的生命周

c++ - 如果我们在不同的机器上将 c++11 mt19937 作为相同的种子,我们会得到相同的随机数序列吗

灵感来自this和类似的问题,我想了解C++11中的mt19937伪数生成器在两台不同的机器上的行为如何,它使用相同的输入作为种子。换句话说,假设我们有以下代码;std::mt19937gen{ourSeed};std::uniform_int_distributiondest{0,10000};intrandNumber=dist(gen);如果我们在不同的时间在不同的机器上尝试这段代码,我们每次会得到相同的randNumber值序列还是不同的序列?无论哪种情况,为什么会这样?进一步的问题:不管种子是什么,这段代码会无限生成随机数吗?我的意思是,比如说,如果我们在一个运行数月不间断运

C++:auto 关键字 & 范围for

目录auto关键字:起源:  auto的使用细则:auto不能推导的场景:范围for:范围for的使用条件: C++的空指针:注意: auto关键字:起源: 随着程序越来越复杂,程序中用到的类型也越来越复杂,经常体现在:类型难于拼写含义不明确导致容易出错例如:std::map::iterator于是就有了auto关键字,C++11中,标准委员会赋予了auto全新的含义即:auto不再是一个存储类型指示符,而是作为一个新的类型指示符来指示编译器,auto声明的变量必须由编译器在编译时期推导而得。简单来说,auto可以从获取的数值中推导出我们想要得到的类型。intmain(){inti=0;int